<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>初识git</title>
    <script type="text/javascript">
      /* 
        准备工作
          1、安装git客户端(window操作)
            git bash   支持Linux命令的git控制台  (这个我们比较常用)
            git CMD    支持window命令的git控制台
            git GUI    git控制台可视化界面   (虽然好像比较方便，但实在是不美观)
            
            如果是苹果电脑的话，电脑内部已经自带git
            
          2、VScode  安装git插件(自己百度)
            快捷键 ctrl + ~
            
          3、GitHub官网  注册账号
          
          
          
        开始操作git
          1、打开git bash ，并cd 路径 进入当前我们要操作的文件夹
          2、配置git基本操作
                git config --global user.name "Lonely-Journey"      GitHub的用户名
                git config --global user.email "854866731@qq.com"   GitHub的邮箱
                
            【注】在git中输入命令后，没有消息就是好消息，有响应的信息说明出现错误了
            
          3、git init         在本地进行初始化
            输入上面哪行命令后，会在当前文件夹创建一个.git
            .git文件存储当前项目的所有版本的信息
            【注】这个文件是隐藏文件，需要显示隐藏文件才能看到
            
          4、工作区  =>  暂存区
            git add 文件名           提交某个文件
            git add *                提交所有文件
            
            暂存区  =>  资源区
            git commit -m "对这次提交的内容说明"             描述哦这一次提交的内容，并把数据从暂存区推到资源区
            
          5、查看当前工作区的状态
            git status
            
          6、从暂存区恢复到工作区
            git checkout 文件名                   
                
          7、查看工作区和暂存区的代码区别  
            git diff
            
          8、clear   清屏控制台操作
          
          9、git log   查看已经提交的历史版本
          
          10、git reset --hard HEAD^           退回上一个版本
              git reset --hard HEAD^^          退回上上一个版本
              
          11、恢复文件到指定版本
              git reset --hard 版本号
              
          12、生成ssh密匙
              ssh-keygen -t rsa -C "GitHub注册用的邮箱"
              
          13、暂存区  =>  远程仓库
              git remote add origin 仓库地址
              git push -u origin master
          
          14、第二次提交的时候只需
            git add *
            git commit -m "对这次提交的内容说明"
            git push -u origin master
            
          15、当我们新接收工作时，是需要下载一份总支线代码的
            git clone            从远程仓库克隆项目到本地
            
          16、每天开始工作前，我们都要先从远程仓库上同步代码(也就是更新我们的代码，避免别人上传了他们那部分，我们还在用旧代码，我们上传前也要先同步)
            git pull
            
          17、查看分支与创建分支
            git branch                 查看分支
            git branch 分支名          创建分支
            git checkout 分支名        切换分支
            
            git checkout -b 分支名        创建分支并切换到分支

            git push origin 分支名        把分支上传到远程仓库
            
            分支提交代码到本地版本库时：
            【注意】git commit --no-verify -m "xxxxxxx"       这样是为了绕过代码规范检查
            
            查看状态
            git status   
            git branch
            git log
            
            合并某个分支过程
              git add .                                    添加到暂存区
              git commit --no-verify -m "xxxxxxx"          添加到版本库 --no-verify表示跳过编程规范校验
              git checkout 要合并到的分支名                 转会回开发分支
              git merge 被合并的分支名 --no-ff              将模块分支合并到开发分支
              git push origin dev                          上传到远程仓库
              git branch -d 要删除的分子名                  删除没用的分支

             
            
        git基本原理
          git区域划分
            git本地有三个区域，分别是工作目录区(Working Directory)、暂存区(Stage/index)、版本库/资源库(Repository)。
            再加上远程仓库(Remote Directory)就是一共有四个区域
            
            工作目录区： 工作区就是我们平时放项目代码的地方
            暂存区：     暂存区用于存放我们改动的文件，保存即将提交的文件列表信息
            版本库：     版本库就是安全存放数据的位置，这里面有我们提交过的所有版本的数据，其中HEAD指向最小放入仓库的版本
            远程仓库：   远程仓库用于托管代码的服务器，可以简单的理解为我们项目组中的一台电脑用于远程数据交换
            
          
          
          git管理文件有三种状态：已修改(modified) 、 已暂存(staged) 、 已提交(committed)
          
            Untracked(未跟踪)：此文件在工作区文件夹中，但并没有加入到git库(暂存区中)，不参与版本控制，通过
                              git add . 可状态变为 staged 。
                              
            Unmodify: 文件已经入库，未修改，即版本库中的文件快照内容与工作区文件夹中完全一致，这种类型的文件
                      有两种去处，第一种---如果该文件在工作区被修改，就会变成modified；第二种---如果使用git rm
                      移除版本库，则变成untracked文件。
            
            Modified：文件已经修改，仅仅只是修改，并未进行其他的操作，这个文件也只有两种去处，第一种---通过git add
                      可进入暂存区，变为staged状态；第二种：使用git chackout则是丢弃修改(即把修改的部分删掉，变会
                      没修改的时候的样子)，该文件变为unmodify状态，这个git checkout是从版本库中去处文件，覆盖当前
                      修改的。
                      
            Staged：暂存状态，执行git commit则将修改同步到版本库中，这时候版本库中的文件和工作区的文件变成一致的了
                    文件状态就变成了unmodify状态，再执行git reset HEAD filename 取消暂存，文件状态变为modified
      */
    </script>
  </head>
  <body>
  </body>
</html>
